// 变量

@width: 10px;
@height: @width + 10px;

#header {
  width: @width;
  height: @height;
}

// ------------------------------

.bordered {
  border-top: dotted 1px black;
  border-bottom: solid 2px black;
}

// 混合（Mixin）是一种将一组属性从一个规则集包含（或混入）到另一个规则集的方法

#menu a {
  color: #111;
  .bordered();
}

.post a {
  color: red;
  .bordered();
}

// ==>  编译后的css

.bordered {
  border-top: dotted 1px black;
  border-bottom: solid 2px black;
}
#menu a {
  color: #111;
  border-top: dotted 1px black;
  border-bottom: solid 2px black;
}
.post a {
  color: red;
  border-top: dotted 1px black;
  border-bottom: solid 2px black;
}

// ------------------------------

@base: #f04615;
@width: 0.5;

/*  函数  这是利用 percentage 函数将 0.5 转换为 50%，将颜色饱和度增加 5%，以及颜色亮度降低 25% 并且色相值增加 8 用法 */
.class {
  width: percentage(@width);
  color: saturate(@base, 5%);
  background-color: spin(lighten(@base, 25%), 8);
}

// ==> 编译后的css

.class {
  width: 50%;
  color: #f6430f;
  background-color: #f8b38d;
}

// ------------------------------

// 命名空间和访问符

#bundle() {
  .button {
    display: block;
    border: 1px solid black;
    background-color: grey;
    &:hover {
      background-color: rgb(236, 160, 160);
    }
  }
}

// 现在j就是把 .button 类混合到 #header a 如此：

#header a {
  color: orange;
  #bundle.button();
  // 还可以书写为 #bundle > .button 形式
}

// ==> 编译后的css

#header a {
  color: orange;
  display: block;
  border: 1px solid black;
  background-color: grey;
}
#header a:hover {
  background-color: #eca0a0;
}

// ------------------------------

// 映射（Maps）
/* 从 Less 3.5 版本开始，还可以将混合（mixins）和规则集（rulesets）作为一组值的映射（map）使用。 */

#colors() {
  primary: blue;
  secondary: green;
}
.button {
  color: #colors[primary];
  border: 1px solid #colors[secondary];
}

// ==> 编译后的css

.button {
  color: blue;
  border: 1px solid green;
}

// ------------------------------

// 可以传递参数， 很好很强大
.icon-basic(@bgColor) {
  display: flex;
  border-radius: 50%;
  width: 16px;
  height: 16px;
  color: #fff;
  font-size: 12px;
  background-color: @bgColor;
}

.icon-arrow {
  .icon-basic(#409ffa);
}

.icon-test {
  .icon-basic(red);
}

// ==> 编译后的css

.icon-arrow {
  display: flex;
  border-radius: 50%;
  width: 16px;
  height: 16px;
  color: #fff;
  font-size: 12px;
  background-color: #409ffa;
}

.icon-test {
  display: flex;
  border-radius: 50%;
  width: 16px;
  height: 16px;
  color: #fff;
  font-size: 12px;
  background-color: red;
}
